# 一次使用lodash merge合并数据引起的问题
代码如下,有两个对象通过loadsh merge合并后再 setState,发现更新后的state并没有包含合并数据
const formState = {
name: '215-ms',
appType: 'bav_agm_mssql',
bavType: 'AGM',
bav: {
environmentType: 0,
load: 10,
agmIp: '10.0.0.213',
agmAppId: '9445490',
agmHostId: '9445442',
appIp: '10.0.0.215',
skyId: '142094319961',
skyIp: '10.0.0.212',
mountPoint: 'C:',
instanceName: null,
host: null
},
startType: '0,1',
unit: 'minutes',
dbType: 4,
applicationUuid: '9445490',
startTime: '03:03',
endTime: '07:04',
waitTime: 27
};
const values = {
bav: {
load: 10,
environmentType: 0,
mountPoint: 'C:',
host: '10.0.0.201',
instanceName: 'xiaozhang'
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
官网有句话,该方法类似_.assign (opens new window)
意思是lodash的merge对深层嵌套对象进行合并时是修改源对象的引用。
而在React中数据是不可变的,意味着您不能直接修改状态对象,而是应该创建一个新的对象。
如果需要确保不修改源对象,您可以通过传递一个空对象作为目标来创建一个新的对象,然后将合并的结果存储在新对象中
const result = _.merge({}, target, source);
1